<?php

namespace App\Http\Controllers\Start;

use App\Http\Controllers\HandleRedis;
use App\Interfaces\ObServer;
use App\Libs\Timer;

/**
 * 设置开奖结果
 * Class ResultController
 * @package App\Http\Controllers\Start
 */
class ResultController implements ObServer
{
    use \App\Traits\StartInitParam;//获取初始值
    use \App\Traits\StartHandles;//助手函数

    private static $openStatus = [];//开奖状态(用于缓存)

    /**
     * 用于注册类方法
     * @param $server
     * @param $parameter
     */
    public function onStartServer($server, $parameter)
    {
        //更新开奖时间
        self::updateOpenResult();
        //开奖
        self::openResult();
    }

    /**
     * 更新开奖时间
     */
    public static function updateOpenResult()
    {
        $time = 1;
        Timer::add($time, function () {
            $alltableTime = HandleRedis::getTableOpenTime();//获取所有开奖时间
            foreach ($alltableTime as $tableId => $openTime) {
                if (HandleRedis::getTableStatus($tableId) == 'start') {
                    HandleRedis::initTableOpenTime($tableId, $openTime);
                } else {
                    HandleRedis::initTableOpenTime($tableId, 0);
                }
            }
        }, __FUNCTION__);
    }

    /**
     * 开奖 (将开奖信息发送给客户端)
     */
    public static function openResult()
    {
        $time = 1;
        Timer::add($time, function () {
            //遍历所有台号
            foreach (self::$AllResultStatus as $showhao => $status) {
                //初始化状态
                if(!isset(self::$openStatus[$showhao])) self::$openStatus[$showhao] = $status;
                //判断入口条件
                if($status != self::$openStatus[$showhao]) {//状态不同返回
                    //更换缓存状态
                    self::$openStatus[$showhao] = $status;
                    //发送给客户端
                    self::sendToHaveLoginUser(self::$AllResultData[$showhao]);
                    //开奖设置
                    if($status == 'end_result') self::restoreResultForStart($showhao,self::$AllResultData[$showhao]);
                }
            }
        }, __FUNCTION__);
    }

    /**
     * 下一轮开始投注设置
     * @param $showhao (台子id)
     * @param $result (开奖结果)
     */
    private static function restoreResultForStart($showhao,$result)
    {
        //加锁操作,防止二次处理(处理开奖事务)
        if(HandleRedis::addTableLock($showhao)){
            dump($showhao);//桌子id
//            dump($result['table']);//桌子信息
            dump($result['result']);//开奖结果
            //开奖后处理下注列表信息 todo
            $allBet = HandleRedis::getAllUserBet($showhao);

            ///所有投注用户
            foreach ($allBet as $betUser) {//投注用户
                dump($betUser);
                //记录庄闲的数据
            }

            //开奖后处理聊天信息 todo
            $allChat = HandleRedis::getAllChat($showhao);



            //todo 开奖后修改路单信息
            

            HandleRedis::delTableLock($showhao);
        }
    }
}
